Processors execute instructions to implement software routines. Software written in a high level source code (e.g., C or C#) can be executed on a processor by first compiling the source code with a compiler that converts high level source code into instructions that are specific to the particular processor that the software is to be executed on. The generated instructions (also referred to as “object code” or “binaries”) are subsequently stored in a memory, read from the memory and executed by the processor.
Generally, different processors support different sets of instructions. Thus, if the same high level source code described above is to be executed on another, different processor —typically—a second, different compiler is used to convert the high level source code into object code having constituent instructions that, at least in some respects, are different than the instructions associated with the first processor.
It is often convenient to convert object code for one processor into object code for another processor. For instance, if software is purchased in the form of object code for a first type of processor, the software can be adapted to run on a second different type of processor (that supports a different instruction set than the first processor) by converting the object code into different object code having constituent instructions that are supported by the second processor.
Inefficiencies may arise in the newly created object code, however, because of underlying architectural differences between the two processors.